// 最大矩形的高度一定是数组元素中已知高度的其一。
// 因此计算每个元素高度对应的最大矩形面积
// 由于计算面积不仅需要知道高度还需要知道宽度，因此用下标来算更好
// 通过下标既能知道宽度又能知道高度
/**
 * @param {number[]} heights
 * @return {number}
 */
var largestRectangleArea = function(heights) {
  const stack = []
  let ans = 0
  heights.push(0)
  heights.unshift(0)
  for(let i = 0; i < heights.length; i++) {
    while(stack.length > 0 && heights[i] < heights[stack[stack.length - 1]]) {
      let left = stack.length - 2
      let inx = stack.pop()
      ans = Math.max(ans, heights[inx] * (i - left - 1))
    }
    stack.push(heights[i])
  }
  return ans
};